// This example shows how to lock and unlock connections to an OPC UA server. The component attempts to keep the locked // connections open, until unlocked. // // Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . using System; using Microsoft.Extensions.DependencyInjection; using OpcLabs.EasyOpc.UA; using OpcLabs.EasyOpc.UA.OperationModel; using OpcLabs.EasyOpc.UA.Services; namespace UADocExamples._EasyUAClientConnectionControl { class LockAndUnlockConnection { public static void Main1() { UAEndpointDescriptor endpointDescriptor = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"; // or "http://opcua.demo-this.com:51211/UA/SampleServer" (currently not supported) // or "https://opcua.demo-this.com:51212/UA/SampleServer/" // Instantiate the client object and hook events using (var client = new EasyUAClient()) { // Obtain the client connection monitoring service. IEasyUAClientConnectionMonitoring clientConnectionMonitoring = client.GetService<IEasyUAClientConnectionMonitoring>(); if (clientConnectionMonitoring is null) { Console.WriteLine("The client connection monitoring service is not available."); return; } // Obtain the client connection control service. IEasyUAClientConnectionControl clientConnectionControl = client.GetService<IEasyUAClientConnectionControl>(); if (clientConnectionControl is null) { Console.WriteLine("The client connection control service is not available."); return; } // Display the server condition changed events. clientConnectionMonitoring.ServerConditionChanged += (sender, args) => Console.WriteLine(args); int lockHandle = 0; bool locked = false; try { Console.WriteLine("Reading (1)"); // The first read will cause a connection to the server. UAAttributeData attributeData1 = client.Read(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853"); Console.WriteLine(attributeData1); Console.WriteLine("Waiting for 10 seconds..."); // Since the connection is now not used for some time, and it is not locked, it will be closed. System.Threading.Thread.Sleep(10 * 1000); Console.WriteLine("Locking"); // Locking the connection causes it to open, if possible. lockHandle = clientConnectionControl.LockConnection(endpointDescriptor); locked = true; Console.WriteLine("Waiting for 10 seconds..."); // The connection is locked, it will not be closed now. System.Threading.Thread.Sleep(10 * 1000); Console.WriteLine("Reading (2)"); UAAttributeData attributeData2 = client.Read(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853"); Console.WriteLine(attributeData2); Console.WriteLine("Waiting for 10 seconds..."); // The connection is still locked, it will not be closed now. System.Threading.Thread.Sleep(10 * 1000); } catch (UAException uaException) { Console.WriteLine("*** Failure: {0}", uaException.GetBaseException().Message); } finally { if (locked) { Console.WriteLine("Unlocking"); clientConnectionControl.UnlockConnection(lockHandle); } } Console.WriteLine("Waiting for 10 seconds..."); // After some delay, the connection will be closed, because there are no subscriptions to the server and no // connection locks. System.Threading.Thread.Sleep(10 * 1000); Console.WriteLine("Finished."); } } // Example output: // //Reading (1) //"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connecting; Success; Attempt #1 //"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connected; Success //-1.034588E+18 {Single} @2021-11-15T15:26:39.169 @@2021-11-15T15:26:39.169; Good //Waiting for 10 seconds... //"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnecting; Success //"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnected(RetrialDelay=Infinite); Success //Locking //"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connecting; Success; Attempt #1 //"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connected; Success //Waiting for 10 seconds... //Reading (2) //2.288872E+21 {Single} @2021-11-15T15:26:59.836 @@2021-11-15T15:26:59.836; Good //Waiting for 10 seconds... //Unlocking //Waiting for 10 seconds... //"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnecting; Success //"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnected(RetrialDelay=Infinite); Success //Finished. } }
# This example shows how to lock and unlock connections to an OPC UA server. The component attempts to keep the locked # connections open, until unlocked. # # Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . # OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python . # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import time import opclabs_quickopc # Import .NET namespaces. from Microsoft.Extensions.DependencyInjection import * from OpcLabs.EasyOpc.UA import * from OpcLabs.EasyOpc.UA.OperationModel import * from OpcLabs.EasyOpc.UA.Services import * endpointDescriptor = UAEndpointDescriptor('opc.tcp://opcua.demo-this.com:51210/UA/SampleServer') # or 'http://opcua.demo-this.com:51211/UA/SampleServer' (currently not supported) # or 'https://opcua.demo-this.com:51212/UA/SampleServer/' # Instantiate the client object and hook events. client = None try: client = EasyUAClient() # Obtain the client connection monitoring service. clientConnectionMonitoring = ServiceProviderServiceExtensions.GetService[IEasyUAClientConnectionMonitoring](client) if clientConnectionMonitoring is None: print('The client connection monitoring service is not available.') exit() # Obtain the client connection control service. clientConnectionControl = ServiceProviderServiceExtensions.GetService[IEasyUAClientConnectionControl](client) if clientConnectionControl is None: print('The client connection control service is not available.') exit() # Display the server condition changed events. clientConnectionMonitoring.ServerConditionChanged += lambda sender, args: print(args) lockHandle = 0 locked = False try: print('Reading (1)') # The first read will cause a connection to the server. attributeData1 = IEasyUAClientExtension.Read(client, endpointDescriptor, UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10853')) print(attributeData1) print('Waiting for 10 seconds...') # Since the connection is now not used for some time, and it is not locked, it will be closed. time.sleep(10) print('Locking') # Locking the connection causes it to open, if possible. lockHandle = clientConnectionControl.LockConnection(endpointDescriptor) locked = True print('Waiting for 10 seconds...') # The connection is locked, it will not be closed now. time.sleep(10) print('Reading (2)') attributeData2 = IEasyUAClientExtension.Read(client, endpointDescriptor, UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10853')) print(attributeData2) print('Waiting for 10 seconds...') # The connection is still locked, it will not be closed now. time.sleep(10) except UAException as uaException: print('*** Failure: ' + uaException.GetBaseException().Message) finally: if locked: print('Unlocking') clientConnectionControl.UnlockConnection(lockHandle) print('Waiting for 10 seconds...') # After some delay, the connection will be closed, because there are no subscriptions to the server and no # connection locks. time.sleep(10) print('Finished.') finally: client and client.Dispose()
' This example shows how to lock and unlock connections to an OPC UA server. The component attempts to keep the locked ' connections open, until unlocked. ' ' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Imports Microsoft.Extensions.DependencyInjection Imports OpcLabs.EasyOpc.UA Imports OpcLabs.EasyOpc.UA.OperationModel Imports OpcLabs.EasyOpc.UA.Services Namespace _EasyUAClientConnectionControl Partial Friend Class LockAndUnlockConnection Public Shared Sub Main1() Dim endpointDescriptor As UAEndpointDescriptor = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" ' or "http://opcua.demo-this.com:51211/UA/SampleServer" (currently not supported) ' or "https://opcua.demo-this.com:51212/UA/SampleServer/" ' Instantiate the client object and hook events Using client = New EasyUAClient() ' Obtain the client connection monitoring service. Dim clientConnectionMonitoring As IEasyUAClientConnectionMonitoring = client.GetService(Of IEasyUAClientConnectionMonitoring) If clientConnectionMonitoring Is Nothing Then Console.WriteLine("The client connection monitoring service is not available.") Exit Sub End If ' Obtain the client connection control service. Dim clientConnectionControl As IEasyUAClientConnectionControl = client.GetService(Of IEasyUAClientConnectionControl) If clientConnectionControl Is Nothing Then Console.WriteLine("The client connection control service is not available.") Exit Sub End If ' Display the server condition changed events. AddHandler clientConnectionMonitoring.ServerConditionChanged, Sub(sender, args) Console.WriteLine(args) End Sub Dim lockHandle As Integer = 0 Dim locked As Boolean = False Try Console.WriteLine("Reading (1)") ' The first read will cause a connection to the server. Dim attributeData1 As UAAttributeData = client.Read(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853") Console.WriteLine(attributeData1) Console.WriteLine("Waiting for 10 seconds...") ' Since the connection is now not used for some time, and it is not locked, it will be closed. System.Threading.Thread.Sleep(10 * 1000) Console.WriteLine("Locking") ' Locking the connection causes it to open, if possible. lockHandle = clientConnectionControl.LockConnection(endpointDescriptor) locked = True Console.WriteLine("Waiting for 10 seconds...") ' The connection is locked, it will not be closed now. System.Threading.Thread.Sleep(10 * 1000) Console.WriteLine("Reading (2)") Dim attributeData2 As UAAttributeData = client.Read(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853") Console.WriteLine(attributeData2) Console.WriteLine("Waiting for 10 seconds...") ' The connection is still locked, it will not be closed now. System.Threading.Thread.Sleep(10 * 1000) Catch uaException As UAException Console.WriteLine("*** Failure: {0}", uaException.GetBaseException().Message) Finally If locked Then Console.WriteLine("Unlocking") clientConnectionControl.UnlockConnection(lockHandle) End If End Try Console.WriteLine("Waiting for 10 seconds...") ' After some delay, the connection will be closed, because there are no subscriptions to the server and no ' connection locks. System.Threading.Thread.Sleep(10 * 1000) Console.WriteLine("Finished.") End Using End Sub ' Example output ' 'Reading (1) '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connecting; Success; Attempt #1 '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connected; Success '-1.034588E+18 {Single} @2021-11-15T15:26:39.169 @@2021-11-15T15:26:39.169; Good 'Waiting for 10 seconds... '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnecting; Success '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnected(RetrialDelay=Infinite); Success 'Locking '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connecting; Success; Attempt #1 '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connected; Success 'Waiting for 10 seconds... 'Reading (2) '2.288872E+21 {Single} @2021-11-15T15:26:59.836 @@2021-11-15T15:26:59.836; Good 'Waiting for 10 seconds... 'Unlocking 'Waiting for 10 seconds... '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnecting; Success '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnected(RetrialDelay=Infinite); Success 'Finished. End Class End Namespace
Rem This example shows how to lock and unlock connections to an OPC UA server. The component attempts to keep the locked Rem connections open, until unlocked. Rem Rem Find all latest examples here : https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html . Option Explicit Dim endpointDescriptorUrlString: endpointDescriptorUrlString = "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Dim EndpointDescriptor: Set EndpointDescriptor = CreateObject("OpcLabs.EasyOpc.UA.UAEndpointDescriptor") EndpointDescriptor.UrlString = endpointDescriptorUrlString ' Instantiate the client object. Dim Client: Set Client = CreateObject("OpcLabs.EasyOpc.UA.EasyUAClient") ' Obtain the client connection monitoring service. Dim ClientConnectionMonitoring: Set ClientConnectionMonitoring = Client.GetServiceByName("OpcLabs.EasyOpc.UA.Services.IEasyUAClientConnectionMonitoring, OpcLabs.EasyOpcUA") If ClientConnectionMonitoring Is Nothing Then WScript.Echo "The client connection monitoring service is not available." WScript.Quit End If ' Obtain the client connection control service. Dim ClientConnectionControl: Set ClientConnectionControl = Client.GetServiceByName("OpcLabs.EasyOpc.UA.Services.IEasyUAClientConnectionControl, OpcLabs.EasyOpcUA") If ClientConnectionControl Is Nothing Then WScript.Echo "The client connection control service is not available." WScript.Quit End If ' Display the server condition changed events. WScript.ConnectObject ClientConnectionMonitoring, "ClientConnectionMonitoring_" WScript.Echo "Reading (1)" ' The first read will cause a connection to the server. Dim AttributeData1: Set AttributeData1 = Client.Read(endpointDescriptorUrlString, "nsu=http://test.org/UA/Data/ ;i=10853") WScript.Echo AttributeData1 WScript.Echo "Waiting for 10 seconds..." ' Since the connection is now not used for some time, and it is not locked, it will be closed. WScript.Sleep 10*1000 WScript.Echo "Locking..." ' Locking the connection causes it to open, if possible. Dim lockHandle: lockHandle = ClientConnectionControl.LockConnection(EndpointDescriptor) WScript.Echo "Waiting for 10 seconds..." ' The connection is locked, it will not be closed now. WScript.Sleep 10*1000 WScript.Echo "Reading (2)" ' The second read, because it closely follows the first one, will reuse the connection that is already open. Dim AttributeData2: Set AttributeData2 = Client.Read(endpointDescriptorUrlString, "nsu=http://test.org/UA/Data/ ;i=10853") WScript.Echo AttributeData2 WScript.Echo "Waiting for 10 seconds..." ' The connection is still locked, it will not be closed now. WScript.Sleep 10*1000 WScript.Echo "Unlocking..." ClientConnectionControl.UnlockConnection(lockHandle) WScript.Echo "Waiting for 10 seconds..." ' After some delay, the connection will be closed, because there are no subscriptions to the server and no ' connection locks. WScript.Sleep 10*1000 WScript.Echo "Finished." Sub ClientConnectionMonitoring_ServerConditionChanged(Sender, e) WScript.Echo e End Sub ' Example output: ' 'Reading (1) '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connecting; Success; Attempt #1 '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connected; Success '-1.034588E+18 {Single} @2021-11-15T15:26:39.169 @@2021-11-15T15:26:39.169; Good 'Waiting for 10 seconds... '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnecting; Success '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnected(RetrialDelay=Infinite); Success 'Locking '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connecting; Success; Attempt #1 '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Connected; Success 'Waiting for 10 seconds... 'Reading (2) '2.288872E+21 {Single} @2021-11-15T15:26:59.836 @@2021-11-15T15:26:59.836; Good 'Waiting for 10 seconds... 'Unlocking 'Waiting for 10 seconds... '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnecting; Success '"opc.tcp://opcua.demo-this.com:51210/UA/SampleServer" Disconnected(RetrialDelay=Infinite); Success 'Finished.
Copyright © 2004-2024 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base, Product Downloads. Technical support: Online Forums, FAQ.Missing some example? Ask us for it on our Online Forums! You do not have to own a commercial license in order to use Online Forums, and we reply to every post.